MODIFICHE A SOMA (Secure and Open Mobile Agent)

In questo documento sono descritte tutte le modifiche apportate al
sistema SOMA, rispetto alla versione disponibile all'indirizzo
http://www-lia.deis.unibo.it/Software/MA

Il sistema SOMA (noto anche come Mobile Agent Support release 2) è
sviluppato con il JDK 1.2 beta 2.

Per l'utilizzo con il sistema MARS (Mobile Agent Reactive Spaces) sono
utilizzati solo i tre seguenti package di SOMA:
AgentSystem
GateWay
PlaceManager
 
 

Il riferimento a MARS


Ogni place di SOMA è fornito di uno spazio di tuple MARS.
Gli agenti di SOMA possono acquisire un riferimento allo spazio MARS
per mezzo dell'istruzione
Space main = PlaceManager.P.TupleSpace(myId);
dove il parametro myId di classe AgentIdentity indica il ruolo
dell'agente.

Alla classe PlaceManager.Place sono state aggiunte le seguenti linee:
import jive.javaSpace.*;
import java.security.Principal;
public class Place {
...
private SpaceKernel TupleSpace;

public Place(String nome) {
...
TupleSpace = MARS.init(Nome);
}

public Space TupleSpace(Principal id)
throws SecurityException {
return TupleSpace.createReactiveSpace(id);
}

public Space PassiveTupleSpace(Principal id)
throws SecurityException {
return TupleSpace.createPassiveSpace(id);
}
...}
 
 

La clonazione degli agenti


Nella versione originale di SOMA gli agenti migrano da un place ad un
altro, cioè di ogni agente esiste una sola istanza.
Per molti compiti, tra cui quello di ricerca di informazioni
presentato nell'Esempio 1, è necessario che gli agenti creino più
copie di sé, cioè è necessario che siano in grado di clonarsi.
A tale scopo è stato modificato il meccanismo di mobilità degli
agenti, in modo tale che l'agente non venga rimosso dal place di
partenza, dopo che ne è stata creata una copia sul place di
destinazione.

Nella classe AgentSystem.AgentSystem, metodi go, le istruzioni
AgentManager.dispose(agid,ag.getClass().toString());
sono state eliminate.
 
 

Installazione del Security Manager per RMI


Nella versione originale di SOMA viene installato il Security Manager
di default. Poiché MARS usa i metodi RMI per la chiamata di metodi
remoti, nella versione modificata di SOMA viene installato il Security
Manager per RMI.

Nella classe AgentSystem.SecurityMan, metodo init, la linea
System.setSecurityManager(new SecurityManager());
è stata sostituita con
System.setSecurityManager(new RMISecurityManager());
 
 

Eccezioni lanciate dagli agenti


L'invocazione dei metodi degli agenti viene gestita attraverso
gli strumenti della reflection di Java.
Le eccezioni lanciate dall'interno di un tale metodo sono inglobate in
un'eccezione di tipo InvocationTargetException, quando l'eccezione
originaria esce dal metodo. La modifica effettuata permette di
recuperare l'eccezione originaria e si è rivelata molto utile in fase
di debugging.

Nella classe AgentSystem.Worker, metodo run, le linee
try {
first.invoke(My_Agent,null);
} catch (Exception e) {
e.printStackTrace();
sono state sostituite con
try {
first.invoke(My_Agent,null);
} catch (InvocationTargetException e) {
e.getTargetException().printStackTrace();
 
 

Bug


Per ovviare a errori a tempo di compilazione e d'esecuzione sono state
effettuate due modifiche a SOMA.

La classe AgentSystem.NodeName è ora dichiarata public.
La classe Starter è stata spostata nel package AgentSystem.